/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package model.dao;

import java.util.Calendar;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceException;
import javax.persistence.Query;
import model.dominio.SessaoUsuario;
import model.dominio.Usuario;

/**
 *
 * @author Daniel
 */
public class DaoUsuario extends DaoBase {

    public DaoUsuario() {
        super();
    }

    public Usuario salvar(Usuario usuario) {
        usuario.setData_ultima_alteracao(Calendar.getInstance());
        usuario.setUsuario(SessaoUsuario.getUsuarioLogado());
        return (Usuario) super.salvar(usuario);
    }
    
    /**
     * @author Daniel
     * @param usuario usuário 
     * @return em caso de sucesso, isto é, usuário existe e senha está correta,
     * retorna o usuário que foi buscado, retorna null, caso contrário
     */
    public Usuario buscarUsuario(Usuario usuario) {
        EntityManager em = super.getEntityManager();
        try {
            String strSQL = "SELECT u FROM Usuario u ";
            strSQL += "WHERE u.login=?1 AND u.senha=?2";

            em.getTransaction().begin();

            Query query = em.createQuery(strSQL);
            query.setParameter(1, usuario.getLogin());
            query.setParameter(2, usuario.getSenha());

            Usuario user = (Usuario) query.getSingleResult();
            return user;
        } catch (PersistenceException e) {
            return null;
        } finally {
            em.close();
        }
    }
    /**
     * @author Daniel
     * @param usuario o usuário a ser buscado
     * @return usuário com o CPF dado ou lista de usuários que tenham nomes que se assemelham, 
     * retorna null caso não haja usuários que se encaixem nas condições acima.
     */
    public List<Usuario> buscarUsuarios(Usuario usuario) {
        EntityManager em = super.getEntityManager();

        try {
            String strSQL = "SELECT u FROM Usuario u ";
            if (usuario.getCpf() != null) {
                strSQL += "WHERE u.cpf='" + usuario.getCpf() + "' ";
            } else if (usuario.getNome() != null) {
                strSQL += "WHERE u.nome LIKE '" + usuario.getNome() + "%' ";
            }
            strSQL += "ORDER BY NOME ASC";
            em.getTransaction().begin();

            Query query = em.createQuery(strSQL);

            return (List<Usuario>) query.getResultList();
        } catch (PersistenceException e) {
            return null;
        } finally {
            em.close();
        }
    }
    public List<Usuario> buscarUsuarios() {
        EntityManager em = super.getEntityManager();

        try {
            String strSQL = "SELECT u FROM Usuario u ";
            
            strSQL += " ORDER BY NOME ASC";
            em.getTransaction().begin();

            Query query = em.createQuery(strSQL);

            return (List<Usuario>) query.getResultList();
        } catch (PersistenceException e) {
            return null;
        } finally {
            em.close();
        }
    }
}
